home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / demos / e-q / mand2000demo / arexx / customcolourmap.mnd2 < prev    next >
Text File  |  1978-06-29  |  4KB  |  86 lines

  1. /* This script sets up a custom colour mapping, to demonstrate how */
  2. /* you can take complete control of the colour mapping, to get */
  3. /* perfect pictures.  This particular custom colour map is just */
  4. /* an example of the control you can get.  To get good use out of */
  5. /* this feature you will have to carefully adjust the colour map */
  6. /* creation code to fit each particular picture and you will have */
  7. /* to adjust the palette also. */
  8. /* This script is supplied with the Mand2000 demo and release */
  9. /* versions and may be freely distributed. */
  10. /* Copyright 1993 Cygnus Software. */
  11.  
  12. /* Note: Custom colourmaps are not supported in the TrueColour modes of */
  13. /* Mand2000. */
  14.  
  15. portname = address()    /* Retrieve the current port name. */
  16. /* If the portname does not start with MAND2000 then this script must */
  17. /* have been run with rx, rather than from Mand2000.  Therefore we */
  18. /* need to set the port name.  We do not always set the port name */
  19. /* because it is better to let Mand2000 set it for us, so that */
  20. /* this script can be used with windows other than the one with */
  21. /* port name MAND2000.1. */
  22. if (left(portname, 8) ~= "MAND2000") THEN
  23.     address 'MAND2000.1'
  24.  
  25.  
  26. /* Parse out the command option.  This script is called when the */
  27. /* user wants a custom colour map turned on, when the user wants a custom */
  28. /* colour map turned off, and whenever the number of iterations or other */
  29. /* colourmap settings change. */
  30.  
  31. parse arg command
  32.  
  33. command = upper(command)    /* Make sure the command is in upper case. */
  34.  
  35. if (command = START) then DO
  36.     EVENTACTION COLOURMAPCHANGE CustomColourMap    /* Make sure this script is automatically called. */
  37.     END
  38. else if (command = STOP) then DO
  39.     EVENTACTION COLOURMAPCHANGE    /* Stop this routine from being called anymore. */
  40.     SetColourMap    /* Reset the colour map. */
  41.     Exit
  42.     END
  43.  
  44. getattr stem WindowVar    /* Get the status structure for the window - put it in WindowVar. */
  45.  
  46. address value WindowVar.masterarexx    /* Briefly go to the global ARexx port*/
  47.                     /* - as specified in the window structure. */
  48. getattr stem GlobalVar
  49.  
  50. /* Grab the screen depth and calculate the number of colours from that. */
  51. maxcolour = (2 ** GlobalVar.screendepth) - 1
  52. address    /* Reset to the previous port. */
  53.  
  54. /* Find out the number of iterations. */
  55. maxiters = WindowVar.maxiters
  56.  
  57. /* Because of the enormous amount of time that it takes ARexx to calculate large colour mappings */
  58. /* this code handles a maximum of 1000 iterations.  It would, however, be fairly easy to write a C */
  59. /* program that would calculate a colour map for 30,000 iterations in a fraction of a second.  */
  60. /* This program could then be called from this script, allowing quite quick turn around. */
  61. if maxiters > 1000 THEN DO
  62.     DISPLAYMESSAGE PROMPT "Calculating a colour map with|this many iterations takes|too long.  Calculating a|colour map for 1000 iterations|instead.  Please wait."
  63.     maxiters = 1000
  64.     END
  65. else if maxiters > 500 THEN
  66.     DISPLAYMESSAGE PROMPT "Please wait - calculating a|colour map with this many|iterations will take a moment."
  67.  
  68. colour = 5
  69. ITERARRAY = " "
  70. DO iter = 0 to maxiters by 2
  71.     /* Set the colour bands to alternate between colour four and successive colours. */
  72.     /* If you set maxiterations to 30,000 this will be VERY slow!  ARexx is not a fast */
  73.     /* language. */
  74.     IterArray = IterArray || " " || 4 || " " || colour
  75.     colour = colour + 1
  76.     if (colour > MaxColour) THEN
  77.         colour = 5
  78.     END
  79. /* Tell Mand2000 to use colour 0 for the Mandelbrot set (default is colour 1) and to */
  80. /* use the array of colour numbers we built up in IterArray. */
  81.  
  82. if maxiters > 500 THEN
  83.     DISPLAYMESSAGE OFF
  84.  
  85. SetColourMap 0   IterArray
  86.